﻿using Admin.NET.Core;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using MailKit.Net.Smtp;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using MimeKit;
using Newtonsoft.Json;
using System.ComponentModel;

namespace Business.Core.Servive;

/// <summary>
/// DemoService 提供天气预报相关的服务。
/// </summary>
[ApiExplorerSettings(GroupName = "business")]
[AllowAnonymous]
public class DemoService : IDynamicApiController, ITransient
{
    /// <summary>
    /// 获取天气预报信息。
    /// </summary>
    /// <returns>返回天气预报信息的 <see cref="ForecastsItem"/> 对象。</returns>
    [DisplayName("cs")]
    public async Task<ForecastsItem> GetDemo()
    {
        var client = new HttpClient();
        var response = await client.GetAsync("https://restapi.amap.com/v3/weather/weatherInfo?key=98d5e8cbcaa1d46355c35d504c41d873&city=511921&extensions=all");
        var content = await response.Content.ReadAsStringAsync();
        var result = JsonConvert.DeserializeObject<Weather>(content)?.forecasts.FirstOrDefault();
        if (result == null)
        {
            return new ForecastsItem();
        }
        return result;
    }
}

/// <summary>
/// 表示天气预报的详细信息。
/// </summary>
public class CastsItem
{
    /// <summary>
    /// 日期。
    /// </summary>
    public string date { get; set; }
    /// <summary>
    /// 星期。
    /// </summary>
    public string week { get; set; }
    /// <summary>
    /// 白天天气。
    /// </summary>
    public string dayweather { get; set; }
    /// <summary>
    /// 夜间天气。
    /// </summary>
    public string nightweather { get; set; }
    /// <summary>
    /// 白天温度。
    /// </summary>
    public string daytemp { get; set; }
    /// <summary>
    /// 夜间温度。
    /// </summary>
    public string nighttemp { get; set; }
    /// <summary>
    /// 白天风向。
    /// </summary>
    public string daywind { get; set; }
    /// <summary>
    /// 夜间风向。
    /// </summary>
    public string nightwind { get; set; }
    /// <summary>
    /// 白天风力。
    /// </summary>
    public string daypower { get; set; }
    /// <summary>
    /// 夜间风力。
    /// </summary>
    public string nightpower { get; set; }
    /// <summary>
    /// 白天温度（浮点数）。
    /// </summary>
    public string daytemp_float { get; set; }
    /// <summary>
    /// 夜间温度（浮点数）。
    /// </summary>
    public string nighttemp_float { get; set; }
}

/// <summary>
/// 表示天气预报信息。
/// </summary>
public class ForecastsItem
{
    /// <summary>
    /// 城市名称。
    /// </summary>
    public string city { get; set; }
    /// <summary>
    /// 城市编码。
    /// </summary>
    public string adcode { get; set; }
    /// <summary>
    /// 省份名称。
    /// </summary>
    public string province { get; set; }
    /// <summary>
    /// 报告时间。
    /// </summary>
    public string reporttime { get; set; }
    /// <summary>
    /// 天气预报详细信息列表。
    /// </summary>
    public List<CastsItem> casts { get; set; }
}

/// <summary>
/// 表示天气信息。
/// </summary>
public class Weather
{
    /// <summary>
    /// 状态。
    /// </summary>
    public string status { get; set; }
    /// <summary>
    /// 计数。
    /// </summary>
    public string count { get; set; }
    /// <summary>
    /// 信息。
    /// </summary>
    public string info { get; set; }
    /// <summary>
    /// 信息代码。
    /// </summary>
    public string infocode { get; set; }
    /// <summary>
    /// 天气预报信息列表。
    /// </summary>
    public List<ForecastsItem> forecasts { get; set; }
}
